﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Csla;
using Csla.Serialization;

namespace Sireass.Bl
{
    [Serializable]
    public class PrestadorUpdater : CommandBase<PrestadorUpdater>
    {
        public static readonly PropertyInfo<PersonaEdit> PersonaProperty = RegisterProperty<PersonaEdit>(c => c.Persona);
        public PersonaEdit Persona
        {
            get { return ReadProperty(PersonaProperty); }
            private set { LoadProperty(PersonaProperty, value); }
        }

        public static readonly PropertyInfo<PrestadorEdit> PrestadorProperty = RegisterProperty<PrestadorEdit>(c => c.Prestador);
        public PrestadorEdit Prestador
        {
            get { return ReadProperty(PrestadorProperty); }
            private set { LoadProperty(PrestadorProperty, value); }
        }

        public static readonly PropertyInfo<UsuarioEdit> UsuarioProperty = RegisterProperty<UsuarioEdit>(c => c.Usuario);
        public UsuarioEdit Usuario
        {
            get { return ReadProperty(UsuarioProperty); }
            private set { LoadProperty(UsuarioProperty, value); }
        }

        public static readonly PropertyInfo<PerfilUsuarioEdit> PerfilUsuarioProperty = RegisterProperty<PerfilUsuarioEdit>(c => c.PerfilUsuario);
        public PerfilUsuarioEdit PerfilUsuario
        {
            get { return ReadProperty(PerfilUsuarioProperty); }
            private set { LoadProperty(PerfilUsuarioProperty, value); }
        }

        public static void Update(PersonaEdit persona, PrestadorEdit prestador, UsuarioEdit usuario, EventHandler<DataPortalResult<PrestadorUpdater>> callback)
        {
            var cmd = new PrestadorUpdater { Persona = persona, Prestador = prestador, Usuario=usuario };
            DataPortal.BeginExecute<PrestadorUpdater>(cmd, callback);
        }

        public static PrestadorUpdater Update(PersonaEdit persona, PrestadorEdit prestador, UsuarioEdit usuario, PerfilUsuarioEdit perfilUsuario)
        {
            var cmd = new PrestadorUpdater { Persona = persona, Prestador = prestador, Usuario = usuario, PerfilUsuario=perfilUsuario };
            return DataPortal.Execute<PrestadorUpdater>(cmd);
        }

        [Transactional(TransactionalTypes.TransactionScope)]
        protected override void DataPortal_Execute()
        {
            using (var dalManager = Sireass.Dal.DalFactory.GetManager())
            {
				if (Persona.IsNew)
				{
					Persona = Persona.Save();
					Prestador.IdPersona = Persona.IdPersona;
					Prestador = Prestador.Save();
					Usuario.IdPersona = Persona.IdPersona;
					Usuario = Usuario.Save();
					PerfilUsuario.IdUsuario = Usuario.IdUsuario;
					PerfilUsuario = PerfilUsuario.Save();
				}
				else {
					PerfilUsuario = PerfilUsuario.Save();
					Usuario = Usuario.Save(); 
					Prestador = Prestador.Save();
					Persona = Persona.Save();
					
					
				}
            }
        }

    }
}
